﻿
/***
*   CollecPicture.h 
*
*Purpose:
*       This file gets the board map used to calibrate
*
****/
//头文件中一般不应包含using声明
#pragma once
#ifndef _COLLECTPICTURE_H_
#define _COLLECTPICTURE_H_

#include <iostream>
#include <vector>
#include <ctime>
#include <pthread.h>
#include <unistd.h>
#include "opencv2/core.hpp"
#include "opencv2/video.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/opencv.hpp"

#define MaxWhitePixel  5000//大于这个值说明标定板在移动
#define MinWhitePixel 1000//小于这个值表明可以考虑保存图像了
#define DiscardPic  2//最开始的两张符合要求的图片丢掉
#define ContinusPic  3
//#define ClarityPic   5.5
#define COLLECTNUM 15
//#define INTERVALTIME 5
#define FRAMEUNIT 50

extern	int picturenum;//thread exit flag
extern	int saveover;
extern	int startsave;

class CollectPicture {
public:
	/* 函数 : 采集图片
     *
     *@参数  :  pictures  //符合要求得棋盘图
     */
	void CollectPic(std::vector<cv::Mat> & pictures);
private:
	/* 函数 : 计算图片清晰度
	 *
	 *@参数  :  Mat imageGrey  //灰度图像
	 */
	double GetClarity(cv::Mat imageGrey);

	/* 函数 : 得到二值化图片中白色像素点的个数
     *
     *@param  :  Mat imageGrey  //灰度图像
     */
	int GetWhitePixel(cv::Mat imageGrey);

	/* 函数 : 提高对环境的适应性，得到当下环境的平均清晰度
     *
     *@param  :  Mat imageGrey  //灰度图像
     */
	static void* timecount(void* args);



private:

	cv::Ptr<cv::BackgroundSubtractor> model = cv::createBackgroundSubtractorMOG2(100, 150.0, false);
	cv::Mat foregroundMask, maskFrame, binaryzation;
	bool doUpdateModel = true;
	cv::Mat_<uchar>::iterator it;
	cv::Mat_<uchar>::iterator itend;
	int counter = 0;

};



#endif